package com.example.demo.day0226;
/**
 *  ArrayList
 * 底层数据结构是数组,查询快,增删慢
 * 线程不安全,效率高
 * Vector
 * 底层数据结构是数组,查询快,增删慢
 * 线程安全,效率低
 * LinkedList
 * 底层数据结构是链表,查询慢,增删快
 *线程不安全,效率高
 */

import java.util.ArrayList;
import java.util.List;

public class DemoList {
    public static void main(String[] args) {
        List list = new ArrayList<String>();//list集合按元素的添加顺序设置元素的索引
        list.add("b");//第一个索引下标为0
        list.add("d");
        list.add("c");
        list.add("a");
        list.add("d");
        System.out.println(list);//list集合中允许使用重复元素
        System.out.println(list.get(2));//通过索引来访问指定位置的集合元素

        list.add(1,"f");//在指定索引下标的位置插入数据
        System.out.println(list);

        List<String> list1 = new ArrayList<String>();
        list1.add("123");
        list1.add("456");
         list.addAll(2,list1);//在list集合索引下标为2的位置插入lint1集合
        System.out.println(list);
        System.out.println(list.indexOf("d"));//获取元素d在集合中第一次出现的索引下标
        System.out.println(list.lastIndexOf("d"));//获取元素d在集合中最后一次出现的索引下标

        list.remove(2);//根据制定的索引下标移除元素
        System.out.println(list);

        list.set(1,"ff");
        System.out.println(list);//根据指定的索引下标修改元素

        List<String> subList=list.subList(2,4);
        //根据索引下标的起始位置截取一段元素形成一个新的集合，截取的时候包含开始的索引，不包含结束的索引
        System.out.println(subList);
        System.out.println(list.size());//集合的长度
    }
}
